package com.zjl.redis.old.Redis6.Redis高级;

/**
 * 随着业务发展的需要,原单体单机部署的系统被演化成分布式集群系统后,
 * 由于分布式系统多线程、多进程并且分布在不同机器上,
 * 这将使原单机部署情况下的并发控制锁策略失效,
 * 单纯的Java API并不能提供分布式锁的能力。
 * 为了解决这个问题就需要一种跨JVM的互斥机制来控制共享资源的访问,
 * 这就是分布式锁要解决的问题!
 *
 * 分布式锁主流的实现方案:
 * 1.基于数据库实现分布式锁。
 * 2.基于缓存(Redis等)。
 * 3.基于Zookeeper
 * 每一种分布式锁解决方案都有各自的优缺点:
 * 1.性能: redis最高+
 * 2.可靠性: zookeeper最高
 * 这里,我们就基于redis实现分布式锁。
 *
 * redis分布式锁：
 *  setnx key value//只有但key不存在时才能添加
 *  setnx look xxx//为了防止锁一直占着   一般会设置过期时间
 *     上锁
 *  del look 释放锁//删除
 *
 *  3、上锁之后突然出现异常,无法设置过期时间了//可以在设置锁的时候  直接设置过期时间
 *
 * 为了确保分布式锁可用，我们至少要确保锁的实现同时满足以下四个条件:。
 * -互斥性。在任意时刻，只有一个客户端能持有锁。
 * 不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁，也
 * 能保证后续其他客户端能加锁。设置过期时间
 * -解铃还须系铃人。加锁和解锁必须是同一个客户端，客户端自己不能把别人
 * 加的锁给解了。
 * -加锁和解锁必须具有原子性。。
 *
 *
 */
public class 分布式锁 {
}
